"""
给出 n 代表生成括号的对数，请你写出一个函数，使其能够生成所有可能的并且有效的括号组合。

例如，给出 n = 3，生成结果为：

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]
"""

class Solution:
    def generateParenthesis(self, n):
        """
        :type n: int
        :rtype: List[str]
        """
        ans = []
        def backtrack(S='', left=0, right=0):
            if len(S) == 2*n:
                ans.append(S)
            if left < n:
                backtrack(S+"(", left+1, right)
            if right < left:
                backtrack(S+")", left, right+1)
        backtrack()
        return ans